包名 com.Meng

/*
*
*    @阿杰   Meng
*
*    有问题请联系：q2217444740
*
*	未完善，待后续更新。
*/


@外部依赖库("../../安卓基本库/依赖库/androidx/appcompat-1.1.0.aar")
@外部依赖库("../../安卓基本库/依赖库/androidx/cardview-1.0.0.aar")
@外部依赖库("../../安卓基本库/依赖库/androidx/core-1.3.0.aar")
@外部依赖库("../../安卓基本库/依赖库/androidx/coordinatorlayout-1.1.0.aar")
@外部依赖库("../../安卓基本库/依赖库/androidx/interpolator-1.0.0.aar")
@外部依赖库("../../安卓基本库/依赖库/material/material-1.1.0.aar")
@导入Java("androidx.coordinatorlayout.widget.CoordinatorLayout")
@导入Java("com.google.android.material.appbar.AppBarLayout")
类 应用栏布局 : 线性布局

	//子组件将跟随滚动滚动 (SCROLL_FLAG_SCROLL)
	@静态
	常量 滚动 : 整数 = 1

	//上滑时隐藏，下滑到顶部时显示。注意，这里只有有下滑动作就会显示 (SCROLL_FLAG_ENTER_ALWAYS)
	@静态 
	常量 优先 : 整数 = 4

	/*下滑时，先显示最小高度部分，
   最后滑到顶部才会完全显示整个。
   须配合 优先 一起使用，
   并且有最小高度，否则无效。 (SCROLL_FLAG_ENTER_ALWAYS_COLLAPSED)*/
	@静态 
	常量 优先_折叠 : 整数 = 8

	//上滑直到折叠状态。必须设置有最小高度属性才生效 (SCROLL_FLAG_EXIT_UNTIL_COLLAPSED)
	@静态 
	常量 折叠_最小高 : 整数 = 2

	//吸附效果。如果滑动超过组件的一半，就继续滑动，如果不超过，就恢复。不包括组件的边距 (SCROLL_FLAG_SNAP)
	@静态 
	常量 吸附 : 整数 = 16

	//吸附效果。在计算距离的时候，是加上边距的。须配合 吸附 一起使用，并且有最小高度，否则无效。(SCROLL_FLAG_SNAP_MARGINS)
	@静态 
	常量 吸附_边距 : 整数 = 32

	//不滚动，此时的子组件固定在顶部不动 (SCROLL_FLAG_NO_SCROLL)
	@静态 
	常量 无滚动 : 整数 = 0

	@静态 
	常量 预设_优先滚动 : 整数 = 滚动 | 优先
	@静态 
	常量 预设_优先折叠 : 整数 = 滚动 | 优先 | 吸附
	@静态 
	常量 预设_优先折叠_最小高度 : 整数 = 滚动 | 优先 | 折叠_最小高 | 吸附

	@code 
   int zt = - 1;
   public void sets(int s){
      this.zt = s;
   }

    public #<应用栏布局>(android.content.Context context) {
        super(context);
     }

    @Override
    public android.widget.LinearLayout onCreateView(android.content.Context context) {
      AppBarLayout v = null;
	  try{v=new AppBarLayout(context);}catch(#<@异常> e){throw new RuntimeException("\n⚠️提示：请将 全局主题或窗口主题 设置为 兼容主题类型\n在窗口上方添加注解，\n如：@窗口主题(兼容主题类型.兼容亮主题)");}
      v.addOnOffsetChangedListener(new AppBarLayout.OnOffsetChangedListener(){
         int zt = - 1;
         @Override
         public final void onOffsetChanged(AppBarLayout appBarLayout, int i) {
            if(i == 0){
               if(zt != 1){
                  #状态(1,i);
                  zt = 1;
                  sets(1);
               }

            }else if(Math.abs(i) >= appBarLayout.getTotalScrollRange()){
               if(zt != 0){
                  #状态(0,i);
                  zt = 0;
                  sets(0);
               }
            }else{
               if(zt != 2){
                  #状态(2,i);
                  zt = 2;
                  sets(2);
               }
            }
         }
      });
	  return v;
	}
	
	public AppBarLayout getView(){
		return (AppBarLayout) view;
	}
    @end

	方法 关联滚动组件(组件 : 可视化组件)
		@code
	  try{
	  CoordinatorLayout.LayoutParams params = (CoordinatorLayout.LayoutParams)#组件.getView().getLayoutParams();
      params.setBehavior(new AppBarLayout.ScrollingViewBehavior());
	  } catch (#<@异常> e){throw new RuntimeException("\n⚠️错误：无法关联滚动组件，此组件并非 协调布局 的子组件");}
	  @end
	结束 方法

	属性写 最小宽度(宽度 : 整数)
		code getView().setMinimumWidth(#宽度);
	结束 属性

	属性写 最小高度(高度 : 整数)
		code getView().setMinimumHeight(#高度);
	结束 属性

	属性读 子组件滚动范围() : 整数
		code return getView().getTotalScrollRange();
	结束 属性

	属性读 可见重叠内容的最小高度() : 整数
		code return getView().getMinimumHeightForVisibleOverlappingContent();
	结束 属性

	//0 为折叠状态, 1 为展开状态, 2 为中间状态
	属性读 展开状态() : 整数
		code return zt;
	结束 属性

	方法 折叠()
		改变状态(假)
	结束 方法

	方法 展开()
		改变状态(真)
	结束 方法

	方法 改变状态(是否展开 : 逻辑型)
		code getView().setExpanded(#是否展开);
	结束 方法

	方法 显示到状态栏(是否 : 逻辑型)
		code getView().setFitsSystemWindows(#是否);
	结束 方法
	
	@布局属性
	方法 显示组件到状态栏(组件 : 可视化组件, 是否 : 逻辑型)
		code #组件.getView().setFitsSystemWindows(#是否);
	结束 方法

	方法 组件滚动方式(组件 : 可视化组件, 滚动 : 整数)
		@code
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
       params.setScrollFlags(#滚动);
	   @end
	结束 方法

	@隐藏
	@布局属性
	方法 ___滚动方式___多选(组件 : 可视化组件, 这是条提示 : 逻辑型)
	结束 方法

	@布局属性
	方法 滚动(组件 : 可视化组件, 滚动 : 逻辑型)
		@code
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
	   int w = params.getScrollFlags();
	   if(!#滚动){
	   	if((w|#<应用栏布局.滚动>)==w) params.setScrollFlags(w-=#<应用栏布局.滚动>);
	   	return;
	   }
	   params.setScrollFlags(params.getScrollFlags() | #<应用栏布局.滚动>);
	   @end
	结束 方法

	@布局属性
	方法 优先(组件 : 可视化组件, 滚动 : 逻辑型)
		@code
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
	   int w = params.getScrollFlags();
	   if(!#滚动){
	   	if((w|#优先)==w) params.setScrollFlags(w-=#优先);
	   	return;
	   }
	   params.setScrollFlags(params.getScrollFlags() | #优先);
	   @end
	结束 方法

	@布局属性
	方法 折叠(组件 : 可视化组件, 滚动 : 逻辑型)
		@code
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
	   int w = params.getScrollFlags();
	   if(!#滚动){
	   	if((w|#优先_折叠)==w) params.setScrollFlags(w-=#优先_折叠);
	   	return;
	   }
	   if((w|#折叠_最小高)==w){
	   	w-=#折叠_最小高;
	   	android.util.Log.i("TieApp", String.valueOf("优先_折叠 无法和 折叠_最小高度 组合使用，已自动去除"));
	   }
       params.setScrollFlags(w | #优先_折叠);
	   @end
	结束 方法

	@布局属性
	方法 折叠_最小高度(组件 : 可视化组件, 滚动 : 逻辑型)
		@code
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
       int w = params.getScrollFlags();
	   if(!#滚动){
	   	if((w|#优先_折叠)==w) params.setScrollFlags(w-=#优先_折叠);
	   	return;
	   }
	   if((w|#优先_折叠)==w){
	   	w-=#优先_折叠;
	   	android.util.Log.i("TieApp", String.valueOf("折叠_最小高度 无法和 优先_折叠 组合使用，已自动去除"));
	   }
       params.setScrollFlags(w | #折叠_最小高);
	   @end
	结束 方法

	@布局属性
	方法 吸附(组件 : 可视化组件, 滚动 : 逻辑型)
		@code
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
       int w = params.getScrollFlags();
	   if(!#滚动){
	   	if((w|#吸附)==w) params.setScrollFlags(w-=#吸附);
	   	return;
	   }
	   params.setScrollFlags(params.getScrollFlags() | #吸附);
	   @end
	结束 方法

	@布局属性
	方法 吸附_边距(组件 : 可视化组件, 滚动 : 逻辑型)
		@code
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
       int w = params.getScrollFlags();
	   if(!#滚动){
	   	if((w|#吸附_边距)==w) params.setScrollFlags(w-=#吸附_边距);
	   	return;
	   }
	   params.setScrollFlags(params.getScrollFlags() | #吸附_边距);
	   @end
	结束 方法

	@布局属性
	方法 无滚动(组件 : 可视化组件, 滚动 : 逻辑型)
		@code
	   if(!#滚动) return;
	   AppBarLayout.LayoutParams params = (AppBarLayout.LayoutParams)#组件.getView().getLayoutParams();
	   params.setScrollFlags(0);
	   @end
	结束 方法

	@隐藏
	@布局属性
	方法 ___________(组件 : 可视化组件, 滚动 : 逻辑型)
	结束 方法

	@布局属性
	方法 组件最小宽度(组件 : 可视化组件, 宽度 : 整数)
		code #组件.getView().setMinimumWidth(#宽度);
	结束 方法

	@布局属性
	方法 组件最小高度(组件 : 可视化组件, 高度 : 整数)
		code #组件.getView().setMinimumHeight(#高度);
	结束 方法

	//0 为折叠状态, 1 为展开状态, 2 为中间状态
	定义事件 状态(状态 : 整数, 距离 : 整数)

结束 类